﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace P20_4 {
    internal class Program {
        static void Main(string[] args) {
          
            MyForm myForm = new MyForm();
            myForm.ShowDialog();
        }
    }

    class MyForm : Form {
        /**
         * button：事件的拥有者（因为 click 方法是属于button的）
         * MyForm：事件的响应者
         * click：事件
         * ButtonClicked：事件的具体处理器
         * ButtonClicked：事件的订阅
         */
        private TextBox textBox;
        private Button button;
        private Button button2;
        public MyForm() {
            this.textBox = new TextBox();
            this.button = new Button();
            this.Controls.Add(this.button);
            this.Controls.Add(this.textBox);
            this.button.Click += this.ButtonClicked;
            this.button.Text = "say hello";
            this.button.Top = 100;

            //测试
            this.button2 = new Button();
            this.Controls.Add(this.button2);
            this.button2.Text = " hello";
            this.button2.Top = 50;
            //另外一种事件绑定方式，使用 lambada 表达式
            this.button2.Click += (sender,e) => {
                this.textBox.Text = "Hello World！！！！！！！！";
            };
        }
        /**
         * sender：：表示事件的触发者，父类是 object 类型，可以强制转换为实际类型，这里的 sender 其实就是 button
         * e：包含事件的附加数据（但 Click 事件通常没有额外数据）；基类，具体事件可能有派生类
         */
        private void ButtonClicked(object sender, EventArgs e) {
            Button clickedButton = (Button)sender; // 将 sender 强制转换为 Button 类型
            MessageBox.Show($"你点击了按钮: {clickedButton.Text}");
            this.textBox.Text = "Hello World！！！！！！！！";
        }
    }
}
